package MiddlePractice;

import java.util.HashSet;
import java.util.Set;

public class Demo36 {
//	36. 有效的数独
//	请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ，验证已经填入的数字是否有效即可。
//
//	数字 1-9 在每一行只能出现一次。
//	数字 1-9 在每一列只能出现一次。
//	数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。（请参考示例图）
//	数独部分空格内已填入了数字，空白格用 '.' 表示。

	
	public boolean isValidSudoku(char[][] board) {
		
		for(int i=0; i<9; i++) {
			Set<Character> setRow = new HashSet<>();
			Set<Character> setCol = new HashSet<>();
			
			for(int j=0; j<9; j++) {
				if(board[i][j] != '.') {
					if(!setRow.contains(board[i][j])) {
						setRow.add(board[i][j]);
					}
					else {
						return false;
					}
				}
				if(board[j][i] != '.') {
					if(!setCol.contains(board[j][i])) {
						setCol.add(board[j][i]);
					}
					else {
						return false;
					}
				}
			}
		}
		
		
		for(int i=0; i<3; i++) {
			for(int j=0; j<3; j++) {
				int x = i*3;
				int y = j*3;
				Set<Character> set = new HashSet<>();
				for(int m=0; m<3; m++) {
					for(int n=0; n<3; n++) {
						if(board[m+x][n+y] != '.') {
							if(!set.contains(board[m+x][n+y])) {
								set.add(board[m+x][n+y]);
							}
							else
								return false;
						}
					}
				}
			}
		}
		
		
		
		return true;
		
    }
	
	
	
}
